package com.baizhi.jdkProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 代理者工具类
 */
public class ProxyUtil implements InvocationHandler {

    //被代理者，真实角色
    private Actor obj;

    /**
     * 成成代理对象的额方法
     * @param obj
     * @return
     */
    public Management newProxyInstance(Actor obj){
        this.obj = obj;
        return (Management) Proxy.newProxyInstance(this.obj.getClass().getClassLoader(),this.obj.getClass().getInterfaces(),this);
    }

    /**
     *
     * @param proxy 具体的代理对象
     * @param method 代理对用具有的方法(真实角色具有的方法，抽象角色中的方法)
     * @param args 真实对象的参数
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("检查是否预约");

        if(method.getName().equals("dance")){
            System.out.println("给多少钱都不跳舞");
            return null;
        }
        Object obj = method.invoke(this.obj, args);

        if(method.getName().equals("eat")){
            System.out.println("记录以下，某年某月某日"+ this.obj.getName() + "和某男子一起吃饭");
        }else if(method.getName().equals("sing")){
            System.out.println("记录以下，某年某月某日"+ this.obj.getName() + "和某男子一起唱歌");
        }


        return obj;
    }
}
